"""
    函数参数
        形式参数
    缺省参数（默认参数）
"""

# 缺省（默认）参数：如果实参不提供，可以使用默认参数
def fun01(a=1, b=1, c=1, d=1):
    print(a)
    print(b)
    print(c)
    print(d)

#%% 关键字参数 + 缺省形参：调用者可以随意传递
#fun01(b=3, c=4) # fun01(3, 4)
def miao(hour=0, minute=0, second=0):
    """
        练习： 根据小时，分钟，秒：计算总秒数
        要求： 可以只计算小时---> 秒
            可以只计算分钟---> 秒
            可以只计算小时+分钟---> 秒
            可以只计算小时+秒---> 秒
    """
    return hour*3600 + minute*60 + second # 返回总秒数
# print(miao(3,2))

#%% 星号元组形参
# 星号元组形参： * 将所有的实参合并一个元组
# 作用：让实参个数无限制
def fun02(*args):
    print(args)
# fun02() # ()
# fun02(1) # (1,)
# fun02(1,'2') # (1,'2')



#%% 练习：定义函数，数值相加的函数
def fun03(*args):
    """
        任意数进行累加
    """
    leijia = 0
    for i in args: # 遍历元组元素，进行累加
        leijia += i
    return leijia
    # return sum(args) # 或者用自带的sum（args）函数，进行累加

# print(fun03(12,520))
# print(fun03(12,520,269,658))


#%% 练习：判断素数
# 原版
def get_prime(begin, end):
    lie = []
    for i in range(begin, end): # 生产范围内的整数
        for c in range(2, i): # 判断素数
            if i % c == 0:
                break
        else:
            lie.append(i)
    return lie
# print(get_prime(5,30))

# 优化：分而治之（方法只做一件事），提取判断是否素数为单独一个方法
def id_prime(num):
    """
    获取一个数判断是不是素数

    :param num: [输入一个整数]
    :type num: [int]
    :return: True 为素数， False为不是素数
    """
    for i in range(2, num):
        if num % i == 0: # 如果能够整除，则不是素数
            return False
        return True

def get_primes(begin, end):
    """
    获取范围内的素数

    :param begin: 开始值（包含）
    :type begin: int
    :param end: 结束值（不包含）
    :type end: [int]
    :return: 所有素数的列表
    """
    lie = []
    for i in range(begin, end):
        if id_prime(i):
            lie.append(i)
    return lie
print(get_prime(5,30))

# 综合传参
def zong_he_chuancan(a, b, *args, c=0, d=0, **kwargs):
    """
    综合传参，注意事项

    :param a: 位置参数必填
    :param b: 位置参数必填、
    :args: 位置实参无限传参，没有实参限制，打印出来是元组合集
    :param c: 关键字参数（在有默认参数下可以不传参）, defaults to 0
    :param d: 关键字参数（在有默认参数下可以不传参）, defaults to 0
    :kwargs: 字典形参，使用位置传参方式（位置传参无限），打印出来会是字典合集
    """
    print(a)
    print(b)
    print(args)
    print(c)
    print(d)
    print(kwargs) # 字典合并
zong_he_chuancan(1,2,1,2,3,4,5,6,c=3,d=4,e=5,f=6)



